package com.dunke.web.controller;

import com.dunke.core.common.Result;
import com.dunke.core.data.GetData;
import com.dunke.core.data.PageData;
import com.dunke.core.data.staff.StaffInfo;
import com.dunke.core.data.staff.StaffLog;
import com.dunke.service.StaffService;
import com.dunke.utils.JedisUtil;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * (DbStaff)表控制层
 * 员工管理
 * @author makejava
 * @since 2021-06-23 18:42:18
 */
@RestController
@RequestMapping("/staff")
public class StaffController {
    /**
     * 服务对象
     */
    @Resource
    private StaffService staffService;

    /**
     * 新增员工
     * @param info 实例对象
     * @return 是否成功
     */
    @RequestMapping(path="/add", method=RequestMethod.PUT)
    public Result add(@Validated @RequestBody StaffInfo info) {
        return this.staffService.insert(info);
    }

    /**
     * 通过主键查询单条数据
     * @param data 主键
     * @return 单条数据
     */
    @RequestMapping(path="/getInfo", method={RequestMethod.POST,
            RequestMethod.GET})
    public Result getInfo(@Validated @RequestBody GetData data) {
        return this.staffService.queryById(data);
    }

    /**
     * 修改员工信息
     * @param info 实例对象
     * @return 单条数据
     */
    @RequestMapping(path="/update", method={RequestMethod.POST,
            RequestMethod.GET})
    public Result update(@Validated @RequestBody StaffInfo info) {
        return this.staffService.update(info);
    }

    /**
     * 获取员工信息
     * 参数：type -- 0全部
     *              1在职(包含：在职、二次入职、停职、复职)
     *              2工作中(包含：在职、二次入职、复职)
     *              3停职(包含：工伤停职、停职)
     *              4复职(含：工伤复职、复职)
     *              -1离职
     *     orderBy 排序方式: (entry_time入职时间, suspend_time停职时间,
     *             renew_time复职时间, leave_time离职时间) + (asc 正序, desc 倒叙)
     * 1 在职，0离职，2二次入职，3工伤停职，4工伤复职，5停职,6复职
     * @param paged 分页记录
     * @return
     */
    @RequestMapping(path="/queryAll", method={RequestMethod.POST,
            RequestMethod.GET})
    public Result queryAll(@Validated @RequestBody PageData paged) {
        return this.staffService.queryAllByLimit(paged);
    }

    /**
     * 员工离职
     * @param info 实例对象
     * @return 单条数据
     */
    @RequestMapping(path="/leave", method={RequestMethod.POST,
            RequestMethod.GET})
    public Result leave(@Validated @RequestBody StaffLog info) {
        return this.staffService.updateLog(info);
    }

    /**
     * 通过主键查询单条数据
     * @param data 主键
     * @return 单条数据
     */
    @RequestMapping(path="/del", method={RequestMethod.POST,
            RequestMethod.GET})
    public Result del(@Validated @RequestBody GetData data) {
        return this.staffService.delById(data);
    }

}
